A field programmable gate array (FPGA) is a programmable logic device comprising an array of logic circuits whose functions are determined by the state of configuration memory that also resides within the device. FPGAs can be incorporated into printed circuit board assemblies, and are used in a wide variety of electronic systems.
The configuration memory within a typical FPGA is volatile. Thus, there is a need to configure the FPGAs within a given system. That is, the FPGA must load the configuration memory each time the system power is restored in order for the system to benefit from the intended functionality of the FPGAs. An FPGA configured in such a manner achieves a designed configuration state in which it performs logic and other functions that are specified in a particular design.
Some specific FPGA types provide a number of distinct alternative methods, known as modes, to configure the device. Of particular interest are serial modes that include support for receiving configuration information through a serial port connection to the FPGA. These serial modes support coupling between a FPGA and specific non-volatile integrated circuit (IC) memories. Some manufacturers have offered specific IC memories that directly support corresponding specific FPGA serial modes, in the circumstance where both the FPGA and the IC memory are specifically identified products of a common manufacturer.
When designing a system containing one or more FPGAs with volatile internal configuration memory, a designer may choose to integrate a non-volatile external memory IC whose functions include storing configuration data patterns that map to desired designed configuration states of the FPGAs. The external memory IC can be called upon to provide the contents of its memory during a device configuration process. The non-volatile external memory IC can be a one-time-programmable device (OTP), or commonly, a re-programmable device such as an EEPROM or flash memory. The capability to be programmed more than once is an advantage in systems where ongoing changes to the FPGA design are desired or required. This reprogramming capability is of particular advantage when it is accomplished by software means without need for an operator to physically access the memory device.
In general, flash memory devices provide a speed advantage in programming and reprogramming over traditional EEPROM technologies. Additionally, flash memory devices are manufactured in large volumes due to product penetration into cellular phones, mp3 players, and other consumer electronic devices and thus tend to be readily available. Moreover, high volume production tends to lower memory IC costs, and also tends to lower the cost per memory bit. Multiple vendors of flash memory are able to supply parts with compatible interfaces; such competition also tends to lower prices and lead to technology enhancements.
Flash memory devices that support a synchronous serial peripheral interface (SPI) are of particular interest to designers, because the SPI may be adapted to the serial modes supported by particular FPGA product families.
The introduction of another programmable logic device, the CPLD, into the system design, in order to adapt the FPGA serial mode to SPI flash memory, is problematic. A design for the CPLD configuration must be provided and maintained, and a method for configuring the CPLD must be included when building up one or more systems. Although SPI flash memory provides advantages to the system design in terms of cost and function over other specialized memory alternatives, this advantage is reduced by the cost of providing and configuring the CPLD.
Accordingly, an alternate means of adapting FPGAs to SPI flash memory is needed.